import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/hello123")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      设置响应的body格式
        resp.setContentType("text/html;charset=utf8");

        StringBuilder stringBuilder = new StringBuilder();

//        返回请求协议的名称和版本。
        stringBuilder.append("协议版本：");
        stringBuilder.append(req.getProtocol());
        stringBuilder.append("<br>");

//        返回请求的 HTTP 方法的名称，例如，GET、POST 或 PUT。
        stringBuilder.append("方法：");
        stringBuilder.append(req.getMethod());
        stringBuilder.append("<br>");


//        从协议名称直到 HTTP 请求的第一行的查询字符串中，返回该请求的 URL 的层次路径部分。
        stringBuilder.append("URL：");
        stringBuilder.append(req.getRequestURI());
        stringBuilder.append("<br>");

//        返回指示请求上下文的请求 URI 部分（一级路径）。
        stringBuilder.append("一级路径：");
        stringBuilder.append((req.getContextPath()));
        stringBuilder.append("<br>");

//        返回包含在路径后的请求 URL 中的查询字符串。
        stringBuilder.append("查询字符串：");
        stringBuilder.append(req.getQueryString());
        stringBuilder.append("<br>");

//        返回一个 String 对象的枚举，包含在该请求中包含的参数的名称。
        stringBuilder.append("<h3>获得头部的键值对</h3>");
        Enumeration<String> headerNames = req.getHeaderNames();
         while (headerNames.hasMoreElements()) {
             String headerName = headerNames.nextElement();
             String headerValue = req.getHeader(headerName);
             stringBuilder.append(headerName + ":" + headerValue + "<br>");
         }
         resp.getWriter().write(stringBuilder.toString());

//        以字符串形式返回请求参数的值，或者如果参数不存在则返回null。
//        11
//        返回一个枚举，包含在该请求中包含的所有的头名。
//        以字符串形式返回指定的请求头的值。
//        返回请求主体中使用的字符编码的名称。
//        返回请求主体的 MIME 类型，如果不知道类型则返回 null。
//        以字节为单位返回请求主体的长度，并提供输入流，或者如果长度未知则返回 -1。
//        用于读取请求的 body 内容. 返回一个 InputStream 对象.


    }
}
